Aurora Serverless(v2)のPostgreSQLに外部のSQLクライアントから接続してみた
Aurora Serverless v1では、パブリックIPアドレスを指定してVPC外から接続をするということができませんでした。Aurora Serverless v2ではパブリックIPアドレスが付与できるようになり、VPCの外からも接続できるようになりました。
そこで今回は、Aurora Serverless v2でPostgreSQLを構築し、SQLクライアントから接続してみました。
Aurora Serverless(v2) PostgreSQLの作成
AWSのマネジメントコンソールからRDSのページへ飛び、データベースの作成を行います。
データベースの作成方法を選択
推奨される設定を使って簡単に作成することもできますが、ここでは標準作成を選択します。
エンジンのオプション
エンジンのタイプはAmazon Auroraです。
今回はPostgreSQLにするのでPostgreSQL互換エディションを選択します。
エンジンバージョンですが、Aurora ServerlessはMySQLまたはPostgreSQLの特定のバージョンのみをサポートしています。
どのバージョンがサポートされているのかを確認するには以下の二つの方法があります。
一つは「フィルターの表示」をクリックして、「Serverless v2をサポートするバージョンを表示」をONにします。そうすると利用可能なバージョンが絞り込まれます。
もう一つは、利用可能なバージョンの右にある「情報」をクリックします。すると画面の右側に対象のバージョン一覧が表示されます。Serverless v2ではなくてv1を使いたいけど対応バージョンがわからないという場合は、こちらを参考にすると良いと思います。
今回は、「Serverless v2をサポートするバージョンを表示」をONにして、デフォルトで選択されていた13.7を使いたいと思います。
テンプレート
今回は自分のテスト用なので、開発/テストを選択します。
設定
DBクラスター識別子、マスターユーザー名、マスターパスワードに任意の値を入力します。今回は、デフォルトで入力されている値はそのまま使用することにします。
DBクラスター識別子はマネジメントコンソールの一覧画面に表示される名前です。データベース名やテーブル名ではないので注意してください。
インスタンスの設定
DBインスタンスクラスはサーバーレスを選択します。
可用性と耐久性
マルチAZは障害対策として非常に有効な設定ですが、今回はテスト用なのでデフォルトのままにします。
接続
設定項目が多いですが、ほとんどデフォルトのままにします。
変更する点は以下です。
- 外部のSQLクライアントからアクセスするために、パブリックアクセスを「あり」にします。
- VPCとサブネットグループは新しく作成します。あらかじめ作成してあればそれを選択しても良いです。
- セキュリティグループも新しく作成します。これも既にあればそれを選択しても良いです。
※既存のセキュリティグループを使う場合は、ポート5432へのインバウンドルールがあることを確認してください。(新しく作成する場合は自動的にルールが追加されるようです)
Babelfishの設定、データベース認証
これらはデフォルトのままにします。
今回はSQLクライアントから接続するので、認証方法はユーザ名とパスワードです。
Babelfishについてはこちらの記事を参考にしてください。
Amazon Aurora Serverless v2 で Babelfish for Aurora PostgreSQL が使えるのかを試してみた
追加設定
最初のデータベース名を入力すると、インスタンス作成時にデータベースも作成してくれます。もちろん、ここで作成しなくても後からCREATE DATABASE文で作成できます。
データベースの作成
上記で言及していない項目はすべてデフォルトのままにしました。
それでは、「データベースの作成」をクリックしてデータベースを作成します。
※データベース作成時に以下のエラーが表示された場合、選択したVPCにインターネットゲートウェイがありません。インターネットゲートウェイがあるVPCを選択するか、新しくVPCを作成してください。
ステータスが「利用可能」になるまで数分~十数分かかる場合があるので、待ちます。
SQLクライアントからの接続
私はDBeaverというソフトを使用しましたので、画像はDBeaverのものになります。別のクライアントソフトを使用する場合は、都度読み替えてください。
エンドポイントの確認
データベースが利用可能になったら、ロールが「リージョン別クラスター」になっているもの(この場合database-2)を選択します。
「接続とセキュリティ」タブにエンドポイント名が表示されます。ライターインスタンスとリーダーインスタンスがあり、それぞれ書き込み可能と読み込み専用であるかのように思われますが、実はどちらも書き込みが可能です。
というのも、可用性と耐久性の設定で「レプリカを作成しない」を選択したためです。レプリカを作成しないと、読み込み専用のインスタンスが作成されず、プライマリインスタンスのみが作成されます。するとどちらのエンドポイントもプライマリインスタンスに接続するので、書き込みができてしまうというわけです。
クラスターにプライマリインスタンスのみが含まれていて、Aurora レプリカが含まれていない場合、リーダーエンドポイントはプライマリインスタンスに接続します。その場合、このエンドポイントを介して書き込みオペレーションを実行できます。
ちなみに、マルチAZに設定しても、クラスターが「利用可能」でリーダーインスタンスが「作成中」の状態ではリーダーのエンドポイント経由で書き込みができてしまうので注意してください。
というわけで、今回はどちらのエンドポイントも同じ挙動となるので、どちらかのエンドポイント名をコピーしておきます。
SQLクライアントから接続
クライアントソフトの接続設定を開きます。以下のように入力します。
- Host:コピーしたエンドポイント名
- Database:最初のデータベース名に入力した場合は入力した名前(この場合はsampledb)。入力していない場合は、postgres
- ユーザ名:postgres
- パスワード:設定したパスワード
テスト接続してみて、接続できれば成功です!
SQLを実行してみる
SQLが実行できるかも確認してみます。
SQLエディタで以下のようなSQLコマンドを実行してみます。
create table sampletable( userid int ); insert into sampletable VALUES(1); insert into sampletable VALUES(2); insert into sampletable VALUES(3); select * from sampletable;
結果が表示され、SQLもちゃんと実行できることがわかりました。
感想
Aurora Serverless v1ではVPC外からのアクセスができなかったので、こういったGUIのクライアントソフトからデータベースを確認することができませんでした。
v2になり、VPC外のクライアントソフトからも接続できるようになりました。データベースをGUIで扱えるようになったことで、Aurora Serverlessがより使いやすくなったのかなと感じました。